'use strict';

const { Service } = require('egg');
const ModelName = 'Product';
class RouterService extends Service {
  /**
   * 根据分页和搜索条件获取
   * @param {Object} where 查询用户的条件
   * @param {Number} page 当前分页
   * @param {Number} pageSize 当前页每页多少条
   */
  async getPage(where, page, pageSize) {
    return this.ctx.model[ModelName].findAndCountAll({
      where,
      offset: pageSize * (page - 1),
      limit: pageSize,
      order:[
        ['create_time','DESC'],
      ],
    });
  }

  // 所有列表
  async allList() {
    return this.ctx.model[ModelName].findAll({
      order:[
        // id 降序
        ['create_time','DESC']
      ],
    });
  }
  async findOne(id) {
    return this.ctx.model[ModelName].findOne({
      where: {
        id,
      },
    });
  }

  /**
   * 创建
   * @param {*} data 角色信息
   */
  async create(data) {
    return this.ctx.model[ModelName].create(data);
  }

  /**
   * 根据ID修改
   * @param {Number} id ID
   * @param {Object} data 要修改的信息
   */
  async update(id, data) {
    return await this.ctx.model[ModelName].update(data, { where: { id } });
  }

  /**
   * 根据id删除
   * @param {Number}
   */
  async deleteById(id) {
    return await this.ctx.model[ModelName].destroy({ where: { id } });
  }
  async createList(data) {
    // 根据邮箱统计数据为map
    const map = {};
    data.forEach(item => {
      if (map[item.email]) {
        map[item.email].push(item);
      } else {
        map[item.email] = [item];
      }
    })
    // 重复的数据
    let repeatData = [];
    // 根据邮箱查询用户
    for (const dataKey in map) {
      // 查找用户是否存在
      let user = null
      user = await this.ctx.model.User.findOne({
            where: {
              email: dataKey,
            },
      });
      if (!user) {
        // 创建用户
        user = await this.ctx.model.User.create({
          email: dataKey,
        })
      }
      // 创建产品，保证产品名、url的任意一个都不能重复
        for (const item of map[dataKey]) {

        }
      for (let i = 0; i < map[dataKey].length; i++) {
        let item = map[dataKey][i];
        const product = await this.ctx.model[ModelName].findOne({
          where: {
            // 产品名或者url都不可以重复
            [this.app.Sequelize.Op.or]: [
              {
                product_name: item.product_name,
              },
              {
                url: item.url,
              },
            ],
          },
        });
        if (!product) {
          await this.ctx.model[ModelName].create({
            ...item,
            user_id: user.id,
          });
        } else {
          //
          repeatData.push({
            ...item,
          });
        }
      }
    }

    return repeatData
  }
}

module.exports = RouterService;
